from pyspark import SparkConf, SparkContext

if __name__ == '__main__':
    # 构建SparkConf对象
    conf = SparkConf().setAppName("test").setMaster("local[*]")
    # 构建SparkContext执行环境入口对象
    sc = SparkContext(conf=conf)

    rdd = sc.parallelize([("a", 1), ("a", 1), ("a", 1), ("b", 1), ("c", 1)],2)
    print(rdd.glom().collect())
    # 输出结果 [[('a', 1), ('a', 1)], [('a', 1), ('b', 1), ('c', 1)]]

    rdd2 = rdd.coalesce(3,False)
    """
    coalesce:对RDD的分区执行重新分区（可增可减），仅数量变化
    参数1:分区数量
    参数2: True/False
        True表示允许Shuffle,也就是可以增加分区
        False表示不允许Shuffle,不可以增加分区
        
    repartition(N) = coalesce(N,True)
    repartition底层调用的就是coalesce
    """
    print(rdd2.glom().collect())
    # 输出结果 [[('a', 1), ('a', 1), ('a', 1), ('b', 1), ('c', 1)]]

    rdd3 = rdd.coalesce(3,True)
    print(rdd3.glom().collect())
    # 输出结果 [[('a', 1), ('a', 1)], [('a', 1), ('b', 1), ('c', 1)], []]
